﻿.. include:: <s5defs.txt>
.. #role:: incremental
.. #role:: tiny

.. |bullet| unicode:: U+02022
.. footer:: Alexander Schremmer |bullet| Hack'em 2006 |bullet| 2006-04-29ff

.. # Überblick, Einführung und Ausblick - Kleiner Workshop zum Hacken von eigenen Plugins

=================================================
MoinMoin
=================================================

:Autor: Alexander Schremmer
:Datum: 2006-04-28ff
:Ort: Hack'em 2006, C3BI


Wer bin ich?
============

.. class:: incremental

- Mein Name: Alexander Schremmer, 21 Jahre
- Erster Kontakt mit Wikis im Jahr 2000
- Nutzer und Mitentwickler von MoinMoin seit 2004
- Student der Informatik an der Uni Paderborn seit WS 2005

Überblick
=========
- Wiki engines
- MoinMoin Highlights
- MoinMoin Architektur
- MoinMoin Ausprobieren
- MoinMoin Zukunft
- Plugin Workshop

Was ist ein Wiki?
=================

- Webseiten, die meist von jedem Benutzer geändert werden können
- Wichtigste Technik: Verlinken der Seiten
- Alles soll einfach und schnell gehen
- Wiki ist hawaiianisch für "Schnell"
- Erstes "WikiWikiWeb": 1995 (Ward Cunnigham: Pattern Repository/C2)

Welche Wiki Engines gibt es?
============================

.. container:: handout

   Ungefähr die Reihenfolge der Entstehung

- Usemod (Perl)

 - Eine der ältesten
 - Wird nur noch sehr langsam weiterentwickelt

.. container:: handout

   3x neu geschrieben

- Mediawiki (PHP)

 - Wurde geschrieben, weil Usemod nicht optimal für eine Enzyklopädie geeignet war
 - Runs Wikipedia

Welche Wiki Engines gibt es?
============================

- TWiki (Perl)

 - Von Anfang an stark auf die Belange von Firmen ausgerichtet
 
- MoinMoin (Python)

 - Entstanden im Jahr 2001
 - Basierte auf einem < 100 KByte Wiki (PikiPiki)
 - Ursprünglich von JürgenHermann entwickelt
 - Momentan zwei aktive Projektmitglieder

MoinMoin Highlights
===================

.. container:: handout

   Johill erwähnen :), Packages

- Modulare Architektur mittels Plugins, mit viel Support aus der Community
- GUI-Editor (FCKEditor), dessen Ausgabe von XHTML in Wiki-Markup transformiert werden
- E-Mail-Benachrichtigung von Anfang an
- Übersetzt in mehr als 20 Sprachen (inkl. Bidi-/Unicode-Support)
- Braucht keine Datenbank und funktioniert trotzdem mit Wikis in der Größenordnung von 10000 Seiten
- Anbindung an LDAP und PHP-Anwendungen (Sessiondaten) zur Identifikation/Authentifizierung
- Zentrale Spam-Blacklist, die über XML-RPC aktualisiert wird

Architektur
===========

- Plugin-Typen:

 - Makros
 - Parser
 - Formatter
 - XML-RPC
 - Actions

.. image:: moin_plugins.png
  :align: center


Makros
======

- Werden aus der Seite heraus aufgerufen
- Lassen z. B. das Inhaltsverzeichnis erscheinen
- Codebeispiel::

	def execute(macro, args):
	    f = macro.formatter
	    return (f.rawHTML("<blink>") + f.text(args) +
	        f.rawHTML("</blink>")

- Auf der Seite dann  :literal:`[[Blink(Ownerz0d)]]`

Parser
======

- Zum Verarbeiten von Textblöcken auf Seiten
- Z. B. um dem Wiki reStructured Text oder LaTeX beizubringen
- Beispiel::

    {{{#!irc
    17:31:16 < arigo> mwh: as the situation stands, I guess that we will go ahead and work from small examples on a reading-and-rebuilding interface for RPython frames
    17:31:20 < arigo> or LL frames
    17:31:24 < mwh> arigo: makes sense
    }}}

Formatter
=========

- Generieren der Ausgabe
- Normalerweise HTML
- DocBook mitgeliefert

XML-RPC
=======

- Verfahren, um in entfernten Wikis Daten abzufragen oder zu ändern
- Wird z. B. für das Aktualisieren der Antispam-Blacklist genutzt
- Plugin sieht ähnlich wie ein Makro aus

Actions
=======

- Agieren auf ganzen Seiten (löschen, umbennen, etc.)
- vergl. "Controller" im MVC-Pattern

Moin in 60 Sekunden
===================

- DesktopEdition

 - Z. B. als lokales Notizbuch
 - in 60 Sekunden installiert

http://moinmoin.wikiwikiweb.de/DesktopEdition


Zukunft
=======

.. class:: incremental

   - Google's Summer of Code (wer will mitmachen? $$$)
   - Wikisynchronisation
   - Xapian-"Full Text Search"
   - Gegenrichtung der Wiki-E-Mail-Integration: Wiki verarbeitet Mails und entpackt Attachments
   - Strukturiertere Speicherung und Verarbeitung von Metadaten (RDF etc.)

Noch Fragen?
============

.. image:: HowWikiWorksImage.png
   :align: center
